/*
**  TextView.m, implementation of scrolling text stuff for TextLab.
**  Copyright 1989 NeXT, Inc.  All Rights Reserved.
**  Author: Bruce Blumberg, NeXT Developer Support Group
*/

#import <appkit/appkit.h>
#import "TextView.h"

@implementation TextView:View

+newFrame:(const NXRect *)tFrame
{	NXRect rect;
	
    /*			EXERCISE #1 				*
    *	Turn this into a subclass of a ScrollView and set	*
    *	the docView of the scrolling view to the text object 	*
    *	returned by the -newText: method of TextView.		*
    *	Before you call newText: you will need to determine the	*
    *	size of the text object you want newText: to create for	*
    *	you. It should be the same size of the scrollView less  *
    * 	the size of the scrollers. There is a method of         *
    *	ScrollView which will give you this information. Also 	*
    *	note that in a ScrollView you do not have to explicitly *
    *	make the view you are scrolling over (the docView) a	*
    * 	subview of the ScrollView. That is done for you when you*
    * 	set the docView of the ScrollView			*/

    /* create view */
    self = [super newFrame:tFrame];
    theText = [self newText:&bounds];
    [self addSubview:theText];
    
    // The following two lines allow the resizing of the view
    // to be passed down to the docView (in this case, the text view 
    // itself).

    [[theText superview] setAutoresizeSubviews:YES];
    [[theText superview] setAutosizing:NX_HEIGHTSIZABLE | NX_WIDTHSIZABLE];

     // Create enclosing window, display it and bring it upfront
    [self makeEnclosingWindow:tFrame];
    [window makeFirstResponder:theText];
    [window setTitle:"Untitled"];
    [window display];
    [window makeKeyAndOrderFront:self];
    [theText setSel:0:0];	
    return(self);
}

-makeEnclosingWindow:(const NXRect *)r
{
    id tWin;
    
    tWin = [Window newContent:r style:NX_TITLEDSTYLE 
		backing:NX_BUFFERED buttonMask:NX_ALLBUTTONS defer:NO];
    [tWin setContentView:self];
    [tWin setBackgroundGray:NX_WHITE];
    [tWin setFreeWhenClosed:YES];
    return self;
}

-newText:(const NXRect *)tF
{
	id text = [Text newFrame:tF text:NULL alignment:NX_LEFTALIGNED];
	[text setOpaque:YES];
	[[[[[text notifyAncestorWhenFrameChanged:YES]
		setVertResizable:YES]
		setHorizResizable:NO]
		setMonoFont:NO]
		setDelegate:self];
	
	{ NXSize aSize = {1.0E38,1.0E38};
	 [text setMinSize:&tF->size];
	 [text setMaxSize:&aSize];
        }
	[text setCharFilter:NXEditorFilter];
	return text;
}
@end
	
 

